
#ifndef AI9_LOGIC_2017_TYPEATTACK_H
#define AI9_LOGIC_2017_TYPEATTACK_H

#include "skill.h"
#include "automatic.h"

namespace skill{
    class HurtBuff: public Buff
    {
    public:
        HurtBuff(int h, int hcd, int r):
                Hurt(h), HurtCD(hcd), Buff(r)
        {
            HurtTimer = 0;
            this->setName("HurtBuff");
            this->turn = AttackTurn;
        }
        virtual bool use(Game* g, const std::vector<std::string>& params) override ;
        int Hurt;
        int HurtCD;
        int HurtTimer;
    };
    class ScourgeBuff: public HurtBuff
    {
    public:
        ScourgeBuff(int t, int h, int hcd, int r):
                ScourgeT(t), HurtBuff(h, hcd, r)
        {
            ScourgeTimer = 0;
            this->setName("ScourgeBuff");
        }
        virtual bool use(Game* g, const std::vector<std::string>& params) override;
    private:
        int ScourgeT;
        int ScourgeTimer;
    };
    class Scourge: public CoolDownSkill{
    public:
        explicit Scourge()
        {
            this->setName("Scourge");
            this->cd = ScourgeCD;
            this->turn = TurnName::AttackTurn;
        };

        virtual bool canUse(Game *g, const std::vector<std::string> &params) override;

        virtual bool use(Game *g, const std::vector<std::string> &params) override;
    };
    class Bombing: public CoolDownSkill{
    public:
        explicit Bombing(): CoolDownSkill(){
            this->setName("Bombing");
            this->cd = BombingCD;
            this->turn = TurnName::AttackTurn;
            this->plainRange = BombingRange;
        }

        virtual bool canUse(Game *g, const std::vector<std::string> &params) override;
        virtual bool use(Game *g, const std::vector<std::string> &params) override;
    };
}

#endif //AI9_LOGIC_2017_TYPEATTACK_H
